package mx.itesm.escenas;

import mx.itesm.constants.ConstantesEscenas;
import mx.itesm.manejadores.ManejadorEscenas;
import mx.itesm.niveles.Nivel2;
import mx.itesm.niveles.Nivel3;

import org.andengine.engine.handler.timer.ITimerCallback;
import org.andengine.engine.handler.timer.TimerHandler;
import org.andengine.entity.sprite.ButtonSprite;
import org.andengine.input.touch.TouchEvent;

import android.content.SharedPreferences;


public class EscenaElegirNivel extends EscenaBase {
	
	/*
	 * **************************************************************
	 *                                         Variables
	 * **************************************************************
	 */

	private static final int ORIGEN = ConstantesEscenas.ORIGEN;	
	private static final int NIVEL1_X = ConstantesEscenas.NIVEL1_X;
	private static final int NIVEL1_Y = ConstantesEscenas.NIVEL1_Y;
	private static final int NIVEL2_X = ConstantesEscenas.NIVEL2_X;
	private static final int NIVEL2_Y = ConstantesEscenas.NIVEL2_Y;
	private static final int NIVEL3_X = ConstantesEscenas.NIVEL3_X;
	private static final int NIVEL3_Y = ConstantesEscenas.NIVEL3_Y;
	
	private static final String PROGRESS = "Progress";
	private static final String LV1 = "Lv1_Score";
	private static final String LV2 = "Lv2_Score";
	
	public static int nivelActual;

	/*
	 * **************************************************************
	 *                                         Metodos
	 * **************************************************************
	 */
	
	private int leerScores(String nivel) {
		SharedPreferences prefs = gActivity.getSharedPreferences(PROGRESS, 0);
		int score = prefs.getInt(nivel, 0);
		return score;
	}
	
	@Override
	public void crearEscena() {
		attachChild(createSprite(ORIGEN, ORIGEN, manejadorRecursos.elegirNivelRegion, 
				mVerticesObjetos));
		this.setTouchAreaBindingOnActionDownEnabled(true);
		
		if (leerScores(LV1) >= 1000) {
			Nivel2.locked = false;
		}
		
		if (leerScores(LV2) >= 1000) {
			Nivel3.locked = false;
		}
		
		// Crea el boton de nivel 1
		ButtonSprite botonNivelUno = new ButtonSprite(NIVEL1_X, NIVEL1_Y,
				manejadorRecursos.botonNivelUnoRegion, mVerticesObjetos)  {

			// Se ejecuta cada vez que el usuario hace tap sobre el boton
			@Override
			public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
					float pTouchAreaLocalX, float pTouchAreaLocalY) {

				if (pSceneTouchEvent.isActionDown()) { // actionUp, actionDown, actionMove
					ManejadorEscenas.getInstance().cargarEscenaNivel1();
					ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_LV1);
					ManejadorEscenas.getInstance().descargarEscenaElegirNivel();
					nivelActual = 1;
				}
				return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX,
						pTouchAreaLocalY);
			}
		};
		
		ButtonSprite botonNivelDos = new ButtonSprite(NIVEL2_X, NIVEL2_Y,
				manejadorRecursos.botonNivelDosRegion, mVerticesObjetos)  {

			// Se ejecuta cada vez que el usuario hace tap sobre el boton
			@Override
			public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
					float pTouchAreaLocalX, float pTouchAreaLocalY) {

				if (pSceneTouchEvent.isActionDown()) { // actionUp, actionDown, actionMove

					if (Nivel2.locked) {
						//System.out.println("The level is locked!");
					} else {
						ManejadorEscenas.getInstance().cargarEscenaNivel2();
						ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_LV2);
						ManejadorEscenas.getInstance().descargarEscenaElegirNivel();
						nivelActual = 2;
					}
				}
				return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX,
						pTouchAreaLocalY);
			}
		};
		
		ButtonSprite botonNivelTres = new ButtonSprite(NIVEL3_X, NIVEL3_Y,
				manejadorRecursos.botonNivelTresRegion, mVerticesObjetos) {

			// Se ejecuta cada vez que el usuario hace tap sobre el boton
			@Override
			public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
					float pTouchAreaLocalX, float pTouchAreaLocalY) {

				if (pSceneTouchEvent.isActionDown()) { // actionUp, actionDown, actionMove
					
					if (Nivel3.locked) {
						//System.out.println("The level is locked!");
					} else {
						ManejadorEscenas.getInstance().cargarEscenaNivel3();
						ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_LV3);
						ManejadorEscenas.getInstance().descargarEscenaElegirNivel();
						nivelActual = 3;
					}
				}
				return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX,
						pTouchAreaLocalY);
			}
		};
		
		this.registerTouchArea(botonNivelUno);
		this.attachChild(botonNivelUno);
		
		this.registerTouchArea(botonNivelDos);
		this.attachChild(botonNivelDos);
		
		this.registerTouchArea(botonNivelTres);
		this.attachChild(botonNivelTres);
	}

	@Override
	public TipoEscena getTipoEscena() {
		return TipoEscena.ESCENA_ELEGIR_NIVEL;
	}

	@Override
	public void removerEscena() {
		this.detachSelf();
		this.dispose();
	}

	@Override
	public void onBackKeyPressed() {
		ManejadorEscenas.getInstance().cargarEscenaLoading();
		ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_CARGAR);
		ManejadorEscenas.getInstance().descargarEscenaElegirNivel();

		engine.registerUpdateHandler(new TimerHandler(0.2f, new ITimerCallback() {

			@Override
			public void onTimePassed(final TimerHandler pTimerHandler) {

				engine.unregisterUpdateHandler(pTimerHandler);
				ManejadorEscenas.getInstance().cargarEscenaElegirPersonaje();
				ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_ELEGIR_PERSONAJE);
			}
		}));
	}
}